Micron Document
🎖️GitЯра🎖️


Displaying Raw • Download

core/testing/src/commonMain/kotlin/org/meshtastic/core/testing/FakeBle.kt e85300531e124df08788c1b765d50af1bf6d516d (e8530053) Text, 8.81 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.core.testing

Tff7b72import T7ee787kotlinx.coroutines.CoroutineScope
Tff7b72import T7ee787kotlinx.coroutines.Dispatchers
Tff7b72import T7ee787kotlinx.coroutines.flow.Flow
Tff7b72import T7ee787kotlinx.coroutines.flow.MutableSharedFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.SharedFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.StateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.asSharedFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.asStateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.emitAll
Tff7b72import T7ee787kotlinx.coroutines.flow.flow
Tff7b72import T7ee787org.meshtastic.core.ble.BleCharacteristic
Tff7b72import T7ee787org.meshtastic.core.ble.BleConnection
Tff7b72import T7ee787org.meshtastic.core.ble.BleConnectionFactory
Tff7b72import T7ee787org.meshtastic.core.ble.BleConnectionState
Tff7b72import T7ee787org.meshtastic.core.ble.BleDevice
Tff7b72import T7ee787org.meshtastic.core.ble.BleScanner
Tff7b72import T7ee787org.meshtastic.core.ble.BleService
Tff7b72import T7ee787org.meshtastic.core.ble.BleWriteType
Tff7b72import T7ee787org.meshtastic.core.ble.BluetoothRepository
Tff7b72import T7ee787org.meshtastic.core.ble.BluetoothState
Tff7b72import T7ee787kotlin.time.Duration
Tff7b72import T7ee787kotlin.uuid.Uuid

Tff7b72class T56d364FakeBleDeviceTb4b4b4(
Tff7b72override Tff7b72val Te6edf3addressTb4b4b4: Tffa657StringTb4b4b4,
Tff7b72override Tff7b72val Te6edf3nameTb4b4b4: Tffa657String? Tff7b72= Ta5d6ff"Ta5d6ffFake DeviceTa5d6ff"Tb4b4b4,
Te6edf3initialStateTb4b4b4: Te6edf3BleConnectionState Tff7b72= Te6edf3BleConnectionStateTb4b4b4.Te6edf3DisconnectedTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4: Te6edf3BaseFakeTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3BleDevice Tb4b4b4{
Tff7b72private Tff7b72val Te6edf3_state Tff7b72= Te6edf3mutableStateFlowTb4b4b4(Te6edf3initialStateTb4b4b4)
Tff7b72override Tff7b72val Te6edf3stateTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3BleConnectionStateTff7b72> Tff7b72= Te6edf3_stateTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)

Tff7b72private Tff7b72val Te6edf3_isBonded Tff7b72= Te6edf3mutableStateFlowTb4b4b4(Tff7b72falseTb4b4b4)
Tff7b72override Tff7b72val Te6edf3isBondedTb4b4b4: Tffa657Boolean
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3_isBondedTb4b4b4.Te6edf3value

Tff7b72override Tff7b72val Te6edf3isConnectedTb4b4b4: Tffa657Boolean
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3_stateTb4b4b4.Te6edf3value Tff7b72=Tff7b72= Te6edf3BleConnectionStateTb4b4b4.Te6edf3Connected

Tff7b72override Tff7b72suspend Tff7b72fun Td2a8ffreadRssiTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657Int Tff7b72= Te6edf3DEFAULT_RSSI

Tff7b72override Tff7b72suspend Tff7b72fun Td2a8ffbondTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3_isBondedTb4b4b4.Te6edf3value Tff7b72= Tff7b72true
Tb4b4b4}

Tff7b72fun Td2a8ffsetStateTb4b4b4(Te6edf3newStateTb4b4b4: Te6edf3BleConnectionStateTb4b4b4) Tb4b4b4{
Te6edf3_stateTb4b4b4.Te6edf3value Tff7b72= Te6edf3newState
Tb4b4b4}

Tff7b72companion Tff7b72object Tb4b4b4{
Tff7b72private Tff7b72const Tff7b72val Te6edf3DEFAULT_RSSI Tff7b72= Tff7b72-T79c0ff6T79c0ff0
Tb4b4b4}
Tb4b4b4}

Tff7b72class T56d364FakeBleScanner Tb4b4b4:
Te6edf3BaseFakeTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3BleScanner Tb4b4b4{
Tff7b72private Tff7b72val Te6edf3foundDevices Tff7b72= Te6edf3mutableSharedFlowTff7b72<Te6edf3BleDeviceTff7b72>Tb4b4b4(Te6edf3replay Tff7b72= T79c0ff1T79c0ff0Tb4b4b4)

Tff7b72override Tff7b72fun Td2a8ffscanTb4b4b4(Te6edf3timeoutTb4b4b4: Te6edf3DurationTb4b4b4, Te6edf3serviceUuidTb4b4b4: Te6edf3Uuid?Tb4b4b4, Te6edf3addressTb4b4b4: Tffa657String?Tb4b4b4)Tb4b4b4: Te6edf3FlowTff7b72<Te6edf3BleDeviceTff7b72> Tff7b72= Te6edf3flow Tb4b4b4{
Te6edf3emitAllTb4b4b4(Te6edf3foundDevicesTb4b4b4)
Tb4b4b4}

Tff7b72fun Td2a8ffemitDeviceTb4b4b4(Te6edf3deviceTb4b4b4: Te6edf3BleDeviceTb4b4b4) Tb4b4b4{
Te6edf3foundDevicesTb4b4b4.Te6edf3tryEmitTb4b4b4(Te6edf3deviceTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72class T56d364FakeBleConnection Tb4b4b4:
Te6edf3BaseFakeTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3BleConnection Tb4b4b4{
Tff7b72private Tff7b72val Te6edf3_device Tff7b72= Te6edf3mutableStateFlowTff7b72<Te6edf3BleDevice?Tff7b72>Tb4b4b4(Tff7b72nullTb4b4b4)
Tff7b72override Tff7b72val Te6edf3deviceTb4b4b4: Te6edf3BleDevice?
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3_deviceTb4b4b4.Te6edf3value

Tff7b72private Tff7b72val Te6edf3_deviceFlow Tff7b72= Te6edf3mutableSharedFlowTff7b72<Te6edf3BleDevice?Tff7b72>Tb4b4b4(Te6edf3replay Tff7b72= T79c0ff1Tb4b4b4)
Tff7b72override Tff7b72val Te6edf3deviceFlowTb4b4b4: Te6edf3SharedFlowTff7b72<Te6edf3BleDevice?Tff7b72> Tff7b72= Te6edf3_deviceFlowTb4b4b4.Te6edf3asSharedFlowTb4b4b4(Tb4b4b4)

Tff7b72private Tff7b72val Te6edf3_connectionState Tff7b72= Te6edf3mutableSharedFlowTff7b72<Te6edf3BleConnectionStateTff7b72>Tb4b4b4(Te6edf3replay Tff7b72= T79c0ff1Tb4b4b4)
Tff7b72override Tff7b72val Te6edf3connectionStateTb4b4b4: Te6edf3SharedFlowTff7b72<Te6edf3BleConnectionStateTff7b72> Tff7b72= Te6edf3_connectionStateTb4b4b4.Te6edf3asSharedFlowTb4b4b4(Tb4b4b4)

T8b949e/** When > 0, the next [failNextN] calls to [connectAndAwait] return [BleConnectionState.Disconnected]. */
Tff7b72var Te6edf3failNextNTb4b4b4: Tffa657Int Tff7b72= T79c0ff0

T8b949e/** When non-null, [connectAndAwait] throws this exception instead of connecting. */
Tff7b72var Te6edf3connectExceptionTb4b4b4: Te6edf3Exception? Tff7b72= Tff7b72null

T8b949e/** Negotiated write length exposed to callers; `null` means unknown / not negotiated. */
Tff7b72var Te6edf3maxWriteValueLengthTb4b4b4: Tffa657Int? Tff7b72= Tff7b72null

T8b949e/** Number of times [disconnect] has been invoked. */
Tff7b72var Te6edf3disconnectCallsTb4b4b4: Tffa657Int Tff7b72= T79c0ff0

Tff7b72val Te6edf3service Tff7b72= Te6edf3FakeBleServiceTb4b4b4(Tb4b4b4)

Tff7b72override Tff7b72suspend Tff7b72fun Td2a8ffconnectTb4b4b4(Te6edf3deviceTb4b4b4: Te6edf3BleDeviceTb4b4b4) Tb4b4b4{
Te6edf3_deviceTb4b4b4.Te6edf3value Tff7b72= Te6edf3device
Te6edf3_deviceFlowTb4b4b4.Te6edf3emitTb4b4b4(Te6edf3deviceTb4b4b4)
Te6edf3_connectionStateTb4b4b4.Te6edf3emitTb4b4b4(Te6edf3BleConnectionStateTb4b4b4.Te6edf3ConnectingTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3device Tff7b72is Te6edf3FakeBleDeviceTb4b4b4) Tb4b4b4{
Te6edf3deviceTb4b4b4.Te6edf3setStateTb4b4b4(Te6edf3BleConnectionStateTb4b4b4.Te6edf3ConnectingTb4b4b4)
Tb4b4b4}
Te6edf3_connectionStateTb4b4b4.Te6edf3emitTb4b4b4(Te6edf3BleConnectionStateTb4b4b4.Te6edf3ConnectedTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3device Tff7b72is Te6edf3FakeBleDeviceTb4b4b4) Tb4b4b4{
Te6edf3deviceTb4b4b4.Te6edf3setStateTb4b4b4(Te6edf3BleConnectionStateTb4b4b4.Te6edf3ConnectedTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72override Tff7b72suspend Tff7b72fun Td2a8ffconnectAndAwaitTb4b4b4(Te6edf3deviceTb4b4b4: Te6edf3BleDeviceTb4b4b4, Te6edf3timeoutTb4b4b4: Te6edf3DurationTb4b4b4)Tb4b4b4: Te6edf3BleConnectionState Tb4b4b4{
Te6edf3connectExceptionTff7b72?.Te6edf3let Tb4b4b4{ Tff7b72throw Tffa657it Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3failNextN Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3failNextNTff7b72-Tff7b72-
Tff7b72return Te6edf3BleConnectionStateTb4b4b4.Te6edf3DisconnectedTb4b4b4(Tb4b4b4)
Tb4b4b4}
Te6edf3connectTb4b4b4(Te6edf3deviceTb4b4b4)
Tff7b72return Te6edf3BleConnectionStateTb4b4b4.Te6edf3Connected
Tb4b4b4}

Tff7b72override Tff7b72suspend Tff7b72fun Td2a8ffdisconnectTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3disconnectCallsTff7b72+Tff7b72+
Tff7b72val Te6edf3currentDevice Tff7b72= Te6edf3_deviceTb4b4b4.Te6edf3value
Te6edf3_connectionStateTb4b4b4.Te6edf3emitTb4b4b4(Te6edf3BleConnectionStateTb4b4b4.Te6edf3DisconnectedTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3currentDevice Tff7b72is Te6edf3FakeBleDeviceTb4b4b4) Tb4b4b4{
Te6edf3currentDeviceTb4b4b4.Te6edf3setStateTb4b4b4(Te6edf3BleConnectionStateTb4b4b4.Te6edf3DisconnectedTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3_deviceTb4b4b4.Te6edf3value Tff7b72= Tff7b72null
Te6edf3_deviceFlowTb4b4b4.Te6edf3emitTb4b4b4(Tff7b72nullTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72suspend Tff7b72fun Tff7b72<Te6edf3TTff7b72> Td2a8ffprofileTb4b4b4(
Te6edf3serviceUuidTb4b4b4: Te6edf3UuidTb4b4b4,
Te6edf3timeoutTb4b4b4: Te6edf3DurationTb4b4b4,
Te6edf3setupTb4b4b4: Te6edf3suspend Te6edf3CoroutineScopeTb4b4b4.Tb4b4b4(Te6edf3BleServiceTb4b4b4) Tff7b72-Tff7b72> Te6edf3TTb4b4b4,
Tb4b4b4)Tb4b4b4: Te6edf3T Tff7b72= Te6edf3CoroutineScopeTb4b4b4(Te6edf3DispatchersTb4b4b4.Te6edf3UnconfinedTb4b4b4)Tb4b4b4.Te6edf3setupTb4b4b4(Te6edf3serviceTb4b4b4)

Tff7b72override Tff7b72fun Td2a8ffmaximumWriteValueLengthTb4b4b4(Te6edf3writeTypeTb4b4b4: Te6edf3BleWriteTypeTb4b4b4)Tb4b4b4: Tffa657Int? Tff7b72= Te6edf3maxWriteValueLength
Tb4b4b4}

Tff7b72class T56d364FakeBleWriteTb4b4b4(Tff7b72val Te6edf3characteristicTb4b4b4: Te6edf3BleCharacteristicTb4b4b4, Tff7b72val Te6edf3dataTb4b4b4: Te6edf3ByteArrayTb4b4b4, Tff7b72val Te6edf3writeTypeTb4b4b4: Te6edf3BleWriteTypeTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffequalsTb4b4b4(Te6edf3otherTb4b4b4: Tffa657Any?Tb4b4b4)Tb4b4b4: Tffa657Boolean Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72this Tff7b72=Tff7b72=Tff7b72= Te6edf3otherTb4b4b4) Tff7b72return Tff7b72true
Tff7b72if Tb4b4b4(Te6edf3other Tff7b72!is Te6edf3FakeBleWriteTb4b4b4) Tff7b72return Tff7b72false
Tff7b72return Te6edf3characteristic Tff7b72=Tff7b72= Te6edf3otherTb4b4b4.Te6edf3characteristic Tff7b72&Tff7b72& Te6edf3dataTb4b4b4.Te6edf3contentEqualsTb4b4b4(Te6edf3otherTb4b4b4.Te6edf3dataTb4b4b4) Tff7b72&Tff7b72& Te6edf3writeType Tff7b72=Tff7b72= Te6edf3otherTb4b4b4.Te6edf3writeType
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffhashCodeTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657Int Tff7b72= T79c0ff3T79c0ff1 Tff7b72* Tb4b4b4(T79c0ff3T79c0ff1 Tff7b72* Te6edf3characteristicTb4b4b4.Te6edf3hashCodeTb4b4b4(Tb4b4b4) Tff7b72+ Te6edf3dataTb4b4b4.Te6edf3contentHashCodeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72+ Te6edf3writeTypeTb4b4b4.Te6edf3hashCodeTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tff7b72class T56d364FakeBleService Tb4b4b4: Te6edf3BleService Tb4b4b4{
Tff7b72private Tff7b72val Te6edf3availableCharacteristics Tff7b72= Te6edf3mutableSetOfTff7b72<Te6edf3UuidTff7b72>Tb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3notificationFlows Tff7b72= Te6edf3mutableMapOfTff7b72<Te6edf3UuidTb4b4b4, Te6edf3MutableSharedFlowTff7b72<Te6edf3ByteArrayTff7b72>Tff7b72>Tb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3readQueues Tff7b72= Te6edf3mutableMapOfTff7b72<Te6edf3UuidTb4b4b4, Te6edf3MutableListTff7b72<Te6edf3ByteArrayTff7b72>Tff7b72>Tb4b4b4(Tb4b4b4)

Tff7b72val Te6edf3writes Tff7b72= Te6edf3mutableListOfTff7b72<Te6edf3FakeBleWriteTff7b72>Tb4b4b4(Tb4b4b4)

Tff7b72override Tff7b72fun Td2a8ffhasCharacteristicTb4b4b4(Te6edf3characteristicTb4b4b4: Te6edf3BleCharacteristicTb4b4b4)Tb4b4b4: Tffa657Boolean Tff7b72=
Te6edf3availableCharacteristicsTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3characteristicTb4b4b4.Te6edf3uuidTb4b4b4)

Tff7b72override Tff7b72fun Td2a8ffobserveTb4b4b4(Te6edf3characteristicTb4b4b4: Te6edf3BleCharacteristicTb4b4b4)Tb4b4b4: Te6edf3FlowTff7b72<Te6edf3ByteArrayTff7b72> Tff7b72=
Te6edf3notificationFlowsTb4b4b4.Te6edf3getOrPutTb4b4b4(Te6edf3characteristicTb4b4b4.Te6edf3uuidTb4b4b4) Tb4b4b4{ Te6edf3MutableSharedFlowTb4b4b4(Te6edf3extraBufferCapacity Tff7b72= T79c0ff1T79c0ff6Tb4b4b4) Tb4b4b4}

Tff7b72override Tff7b72suspend Tff7b72fun Td2a8ffreadTb4b4b4(Te6edf3characteristicTb4b4b4: Te6edf3BleCharacteristicTb4b4b4)Tb4b4b4: Te6edf3ByteArray Tff7b72=
Te6edf3readQueuesTff7b72[Te6edf3characteristicTb4b4b4.Te6edf3uuidTff7b72]Tff7b72?.Te6edf3removeFirstOrNullTb4b4b4(Tb4b4b4) Tff7b72?: Te6edf3ByteArrayTb4b4b4(T79c0ff0Tb4b4b4)

Tff7b72override Tff7b72fun Td2a8ffpreferredWriteTypeTb4b4b4(Te6edf3characteristicTb4b4b4: Te6edf3BleCharacteristicTb4b4b4)Tb4b4b4: Te6edf3BleWriteType Tff7b72= Te6edf3BleWriteTypeTb4b4b4.Te6edf3WITH_RESPONSE

Tff7b72override Tff7b72suspend Tff7b72fun Td2a8ffwriteTb4b4b4(Te6edf3characteristicTb4b4b4: Te6edf3BleCharacteristicTb4b4b4, Te6edf3dataTb4b4b4: Te6edf3ByteArrayTb4b4b4, Te6edf3writeTypeTb4b4b4: Te6edf3BleWriteTypeTb4b4b4) Tb4b4b4{
Te6edf3availableCharacteristics Tff7b72+Tff7b72= Te6edf3characteristicTb4b4b4.Te6edf3uuid
Te6edf3writes Tff7b72+Tff7b72= Te6edf3FakeBleWriteTb4b4b4(Te6edf3characteristic Tff7b72= Te6edf3characteristicTb4b4b4, Te6edf3data Tff7b72= Te6edf3dataTb4b4b4.Te6edf3copyOfTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3writeType Tff7b72= Te6edf3writeTypeTb4b4b4)
Tb4b4b4}

Tff7b72fun Td2a8ffaddCharacteristicTb4b4b4(Te6edf3uuidTb4b4b4: Te6edf3UuidTb4b4b4) Tb4b4b4{
Te6edf3availableCharacteristics Tff7b72+Tff7b72= Te6edf3uuid
Tb4b4b4}

Tff7b72fun Td2a8ffemitNotificationTb4b4b4(Te6edf3uuidTb4b4b4: Te6edf3UuidTb4b4b4, Te6edf3dataTb4b4b4: Te6edf3ByteArrayTb4b4b4) Tb4b4b4{
Te6edf3availableCharacteristics Tff7b72+Tff7b72= Te6edf3uuid
Te6edf3notificationFlowsTb4b4b4.Te6edf3getOrPutTb4b4b4(Te6edf3uuidTb4b4b4) Tb4b4b4{ Te6edf3MutableSharedFlowTb4b4b4(Te6edf3extraBufferCapacity Tff7b72= T79c0ff1T79c0ff6Tb4b4b4) Tb4b4b4}Tb4b4b4.Te6edf3tryEmitTb4b4b4(Te6edf3dataTb4b4b4)
Tb4b4b4}

Tff7b72fun Td2a8ffenqueueReadTb4b4b4(Te6edf3uuidTb4b4b4: Te6edf3UuidTb4b4b4, Te6edf3dataTb4b4b4: Te6edf3ByteArrayTb4b4b4) Tb4b4b4{
Te6edf3availableCharacteristics Tff7b72+Tff7b72= Te6edf3uuid
Te6edf3readQueuesTb4b4b4.Te6edf3getOrPutTb4b4b4(Te6edf3uuidTb4b4b4) Tb4b4b4{ Te6edf3mutableListOfTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4.Te6edf3addTb4b4b4(Te6edf3dataTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72class T56d364FakeBleConnectionFactoryTb4b4b4(Tff7b72private Tff7b72val Te6edf3fakeConnectionTb4b4b4: Te6edf3FakeBleConnection Tff7b72= Te6edf3FakeBleConnectionTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4:
Te6edf3BleConnectionFactory Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffcreateTb4b4b4(Te6edf3scopeTb4b4b4: Te6edf3CoroutineScopeTb4b4b4, Te6edf3tagTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Te6edf3BleConnection Tff7b72= Te6edf3fakeConnection
Tb4b4b4}

Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffEmptyFunctionBlockTa5d6ff"Tb4b4b4)
Tff7b72class T56d364FakeBluetoothRepository Tb4b4b4:
Te6edf3BaseFakeTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3BluetoothRepository Tb4b4b4{
Tff7b72private Tff7b72val Te6edf3_state Tff7b72= Te6edf3mutableStateFlowTb4b4b4(Te6edf3BluetoothStateTb4b4b4(Te6edf3hasPermissions Tff7b72= Tff7b72trueTb4b4b4, Te6edf3enabled Tff7b72= Tff7b72trueTb4b4b4)Tb4b4b4)
Tff7b72override Tff7b72val Te6edf3stateTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3BluetoothStateTff7b72> Tff7b72= Te6edf3_stateTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)

Tff7b72override Tff7b72fun Td2a8ffrefreshStateTb4b4b4(Tb4b4b4) Tb4b4b4{Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffisValidTb4b4b4(Te6edf3bleAddressTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Tffa657Boolean Tff7b72= Te6edf3bleAddressTb4b4b4.Te6edf3isNotBlankTb4b4b4(Tb4b4b4)

Tff7b72override Tff7b72fun Td2a8ffisBondedTb4b4b4(Te6edf3addressTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Tffa657Boolean Tff7b72= Te6edf3_stateTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3bondedDevicesTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3address Tff7b72=Tff7b72= Te6edf3address Tb4b4b4}

Tff7b72override Tff7b72suspend Tff7b72fun Td2a8ffbondTb4b4b4(Te6edf3deviceTb4b4b4: Te6edf3BleDeviceTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3currentState Tff7b72= Te6edf3_stateTb4b4b4.Te6edf3value
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3currentStateTb4b4b4.Te6edf3bondedDevicesTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3deviceTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3_stateTb4b4b4.Te6edf3value Tff7b72= Te6edf3currentStateTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3bondedDevices Tff7b72= Te6edf3currentStateTb4b4b4.Te6edf3bondedDevices Tff7b72+ Te6edf3deviceTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72fun Td2a8ffsetBluetoothEnabledTb4b4b4(Te6edf3enabledTb4b4b4: Tffa657BooleanTb4b4b4) Tb4b4b4{
Te6edf3_stateTb4b4b4.Te6edf3value Tff7b72= Te6edf3_stateTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3enabled Tff7b72= Te6edf3enabledTb4b4b4)
Tb4b4b4}

Tff7b72fun Td2a8ffsetHasPermissionsTb4b4b4(Te6edf3hasPermissionsTb4b4b4: Tffa657BooleanTb4b4b4) Tb4b4b4{
Te6edf3_stateTb4b4b4.Te6edf3value Tff7b72= Te6edf3_stateTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3hasPermissions Tff7b72= Te6edf3hasPermissionsTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.08s